#include <climits>
#include <iostream>
#include <algorithm>
#include <climits>
#include <vector>
#include <unordered_set>
#include <unordered_map>
 #include <set>
using namespace std;

//int main() {
//    int n;
//    cin >> n;
//    int arr[n];
//    for (int i = 0; i < n; i++)
//    {
//        cin >> arr[i];
//    }
//    sort(arr, arr + n - 1);
//    int my_min = INT_MAX;
//    for (int i = 1; i < n - 1; i++)
//    {
//        my_min = min(min(arr[i] - arr[i - 1], arr[i + 1] - arr[i]), my_min);
//    }
//    cout << my_min << endl;
//    return 0;
//}
//
//
//using namespace std;
//
//int n;
//int sum = INT_MAX;
//int arr[11];
//
//void dfs(set<int> s, int k, int num)
//{
//    if (num > sum)
//    {
//        return;
//    }
//    if (n == s.size())
//    {
//        sum = min(sum, num);
//        return;
//    }
//    for (int i = 2; i < arr[k]; i++)
//    {
//        if (arr[k] % i == 0)
//        {
//            int p = s.size();
//            s.insert(i);
//            if (s.size() > p)
//            {
//                dfs(s, k + 1, num + i);
//                s.erase(i);
//            }
//        }
//    }
//}
//
//int main() {
//    cin >> n;
//    for (int i = 0; i < n; i++)
//    {
//        cin >> arr[i];
//    }
//    set<int> s;
//    dfs(s, 0, 0);
//    if (sum == INT_MAX)
//    {
//        cout << -1 << endl;
//    }
//    else
//    {
//        cout << sum << endl;
//    }
//    return 0;
//}
//
//char arr[1000001] = { 0 };
//
//int main() {
//    int n;
//    cin >> n;
//    string str;
//    cin >> str;
//    int ret = 0;
//    for (int i = 0; i < n; i++)
//    {
//        char ch = str[i];
//        if (ret == 0 || arr[ret] <= ch)
//        {
//            arr[++ret] = ch;
//        }
//        else
//        {
//            int left = 0;
//            int right = ret;
//            while (left < right)
//            {
//                int mid = (right - left) / 2 + left;
//                if (arr[mid] > ch)
//                {
//                    right = mid;
//                }
//                else
//                {
//                    left = mid + 1;
//                }
//            }
//            arr[left] = ch;
//        }
//    }
//    cout << n - ret << endl;
//    return 0;
//}


//class Solution {
//public:
//    int MLS(vector<int>& arr) {
//        // write code here
//        sort(arr.begin(), arr.end());
//        int left = 0;
//        int right = 0;
//        int my_max = 0;
//        int n = arr.size();
//        int prev = 0;
//        while (right < n)
//        {
//            if (arr[right] != prev + 1)
//            {
//                left = right;
//            }
//            my_max = max(my_max, right - left + 1);
//            prev = arr[right];
//            right++;
//        }
//        return my_max;
//    }
//};


int n, m;
char str[501][501] = { 0 };
bool board[501][501] = { 0 };
int dx[2] = { 0,1 };
int dy[2] = { 1,0 };

int ret = 0;

int infore(char s)
{
    if (s == 'l')
    {
        return 4;
    }
    if (s == 'o')
    {
        return 3;
    }
    if (s == 'v')
    {
        return 2;
    }
    if (s == 'e')
    {
        return 1;
    }
    return 0;
}

void dfs(int x, int y, int sum)
{
    sum += infore(str[x][y]);
    if (x == n - 1 && y == m - 1)
    {
        ret = max(ret, sum);
        return;
    }
    board[x][y] = true;
    for (int i = 0; i < 2; i++)
    {
        int x1 = x + dx[i];
        int y1 = y + dy[i];
        if (x1 >= 0 && x1 < n && y1 >= 0 && y1 < m && !board[x1][y1])
        {
            dfs(x1, y1, sum);
        }
    }
    board[x][y] = false;
}

int main() {
    cin >> n >> m;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> str[i][j];
        }
    }
    dfs(0, 0, 0);
    cout << ret << endl;
    return 0;
}


using namespace std;

int n, m;
int arr[501][501] = { 0 };
int board[501][501] = { 0 };


int infore(char s)
{
    if (s == 'l')
    {
        return 4;
    }
    if (s == 'o')
    {
        return 3;
    }
    if (s == 'v')
    {
        return 2;
    }
    if (s == 'e')
    {
        return 1;
    }
    return 0;
}

void dfs(int x, int y)
{
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            board[i][j] = max(board[i - 1][j], board[i][j - 1]) + arr[i][j];
        }
    }
}

int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            char c;
            cin >> c;
            arr[i][j] = infore(c);
        }
    }
    dfs(1, 1);
    cout << board[n][m] << endl;
    return 0;
}